#include "app.h"
#include "type_a.h"
#include "type_b.h"


#define TOCS_CARD_BUF_MAX		5

typedef struct
{
uint8_t Active;
uint8_t	cn_len;
uint8_t	cn[8];
}s_TOCS_Card;

static s_TOCS_Card TOCS_Card_Buf[TOCS_CARD_BUF_MAX];


uint8_t csn[4];
uint8_t csn_len;

/*****************************************************************************************
名称：	TOCS_Protocol_Task																		 
功能：	TOCS协议处理																	 
输入：	N/A																				 
输出：	N/A																	 
*****************************************************************************************/
void TOCS_Protocol_Task(void)
{
	Tocs_Process();
}
/*****************************************************************************************
名称：	Card_Read_Task																		 
功能：	读卡																	 
输入：	N/A																				 
输出：	N/A																	 
*****************************************************************************************/
void Card_Read_Task(void)
{
	if(TypeB_Card_Read())
	{
		TypeB_CSN_Save(csn,csn_len);
		return;	
	}

	if(TypeA_Card_Read())
	{
		TypeA_CSN_Save(csn,csn_len);
		return;		
	}
}
/*****************************************************************************************
名称：	CSN_Save																		 
功能：	卡类信息保存																	 
输入：	N/A																				 
输出：	N/A																	 
*****************************************************************************************/
void CSN_Save(u8 *csn)
{
	for(i = 0; i < TOCS_CARD_BUF_MAX; i++)
	{
		if(CardLIFO[i].valid==0)
		{
			CardLIFO[i].cn[0] = *csn;
			CardLIFO[i].cn[1] = *(csn+1);
			CardLIFO[i].cn[2] = *(csn+2);
			CardLIFO[i].cn[3] = *(csn+3);
			CardLIFO[i].valid = 1;
			break;
		}
	}
}
/*****************************************************************************************
名称：	TypeB_Card_Read																		 
功能：	读取B类卡																	 
输入：	N/A																				 
输出：	N/A																	 
*****************************************************************************************/
u8 TypeB_Card_Read(void)
{
	if(TypeB_CardActive(pupi_uid) == FALSE)
	{
		return FALSE;
	}

	memcpy(csn,pupi_uid,4);
	return TRUE;
}
/*****************************************************************************************
名称：	TypeA_Card_Read																		 
功能：	读取A类卡																	 
输入：	N/A																				 
输出：	N/A																	 
*****************************************************************************************/
u8 TypeA_Card_Read(void)
{
	if(TypeA_CardActive(picc_atqa,picc_uid,picc_sak) == FALSE)
	{
		return FALSE;
	}

	memcpy(csn,picc_uid,4);
	return TRUE;
}